#!/bin/bash

# 定义日志文件路径
LOG_FILE="/var/log/docker_install.log"

# 定义镜像源选项
MIRRORS=(
    "https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/ubuntu"
    "https://mirrors.aliyun.com/docker-ce/linux/ubuntu"
)

# 选择镜像源
echo "请选择使用的镜像源："
for i in "${!MIRRORS[@]}"; do
    echo "$((i + 1)). ${MIRRORS[$i]}"
done
read -p "请输入选项（默认为1）： " mirror_choice
mirror_choice=${mirror_choice:-1}
MIRROR_URL=${MIRRORS[$((mirror_choice - 1))]}

# 日志记录函数
log() {
    echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" | tee -a "$LOG_FILE"
}

# 检查命令是否成功执行
check_command() {
    if [ $? -ne 0 ]; then
        log "错误：$1"
        exit 1
    fi
}

# 清理旧的 Docker 安装
log "清理旧的 Docker 安装..."
sudo rm -f /etc/apt/sources.list.d/docker.list
sudo rm -f /usr/share/keyrings/docker-archive-keyring.gpg
sudo apt-get remove -y docker docker-engine docker.io containerd runc
# 更新系统
log "更新系统..."
sudo apt update && sudo apt upgrade -y
check_command "系统更新失败"

# 安装必要的依赖项
log "安装必要的依赖项..."
sudo apt install -y apt-transport-https ca-certificates vim curl software-properties-common gnupg lsb-release
check_command "安装依赖项失败"

# 添加 Docker 的 GPG 密钥
log "添加 Docker 的 GPG 密钥..."
curl -fsSL "$MIRROR_URL/gpg" | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
check_command "添加 GPG 密钥失败"

# 添加 Docker 的软件源
log "添加 Docker 的软件源..."
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] $MIRROR_URL $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
check_command "添加软件源失败"

# 更新软件包索引
log "更新软件包索引..."
sudo apt update
check_command "更新软件包索引失败"

# 安装 Docker
log "安装 Docker..."
sudo apt install -y docker-ce docker-ce-cli containerd.io
check_command "安装 Docker 失败"

# 将当前用户添加到 docker 组
log "将当前用户添加到 docker 组..."
sudo groupadd -f docker
sudo usermod -aG docker $USER
check_command "添加用户到 docker 组失败"

# 配置 Docker
log "配置 Docker..."
if [ -f daemon.json ]; then
    sudo cp daemon.json /etc/docker/daemon.json
    log "已使用自定义 daemon.json 配置文件"
else
    log "未找到 daemon.json 配置文件，使用默认配置"
fi

# 重启 Docker 服务
log "重启 Docker 服务..."
sudo systemctl restart docker
check_command "重启 Docker 服务失败"

# 测试 Docker 安装
log "测试 Docker 安装..."
sudo docker run hello-world
check_command "测试 Docker 安装失败"

log "Docker 安装完成！"
